package com.lzz.bottomencapsulation.utils;

import java.io.File;
import java.io.IOException;

/**
 * 文件工具类
 */

public class FileUtils {
//    private static FileUtils fileUtils;
//
//    public static FileUtils instance() {
//        if (fileUtils == null) {
//            fileUtils = new FileUtils();
//        }
//        return fileUtils;
//    }
//
//    /**
//     * 根据文件路径判断文件是否存在
//     *
//     * @param path
//     * @return
//     */
//    public boolean fileIsExists(String path) {
//        try {
//            File f = new File(path);
//            if (!f.exists()) {
//                return false;
//            }
//
//        } catch (Exception e) {
//            return false;
//        }
//        return true;
//    }
//
//    /**
//     * 根据文件路径创建
//     *
//     * @param path
//     * @return
//     */
//    public String fileMkdirs(String path) {
//        File f = new File(path);
//        if (!f.exists()) {
//            f.mkdirs();
//        }
//        return path;
//    }
//
//    public ArrayList<File> getSpecificTypeOfFile(Context context, String[] extension) {
//        ArrayList<File> files = new ArrayList<>();
//        Uri fileUri = MediaStore.Files.getContentUri("external");
//        String[] projection = new String[]{MediaStore.Files.FileColumns.DATA, MediaStore.Files
//                .FileColumns.TITLE};
//        String selection = "";
//        for (int i = 0; i < extension.length; i++) {
//            if (i != 0) {
//                selection = selection + " OR ";
//            }
//            selection = selection + MediaStore.Files.FileColumns.DATA + " LIKE '%" + extension[i]
//                    + "'";
//        }
//        String sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED;
//        ContentResolver resolver = context.getContentResolver();
//        Cursor cursor = resolver.query(fileUri, projection, selection, null, sortOrder);
//        if (cursor == null) return files;
//        if (cursor.moveToLast()) {
//            do {
//                files.add(new File(cursor.getString(0)));
//            } while (cursor.moveToPrevious());
//        }
//        cursor.close();
//        return files;
//    }
//
//    /**
//     * 获取当前目录下所有的mp4文件
//     */
//    public ArrayList<File> GetVideoFileName(String fileAbsolutePath) {
//        ArrayList<File> vecFile = new ArrayList<File>();
//        File file = new File(fileAbsolutePath);
//        File[] subFile = file.listFiles();
//        if (subFile == null) return vecFile;
//        for (int iFileLength = 0; iFileLength < subFile.length; iFileLength++) {
//            // 判断是否为文件夹
//            if (!subFile[iFileLength].isDirectory()) {
//                vecFile.add(subFile[iFileLength]);
//            }
//        }
//        return vecFile;
//    }
//
//    public ArrayList<File> getFileDir(String filePath) {
//        ArrayList<File> paths = new ArrayList<>();
//        File f = new File(filePath);
//        File[] files = f.listFiles();
//        if (files != null) {
//            int count = files.length;
//            for (int i = 0; i < count; i++) {
//                File file = files[i];
//                paths.add(file);
//            }
//        }
//        return paths;
//    }
//
//    public void deleteFile(File file) {
//        if (file.exists()) {
//            if (file.isFile()) {
//                file.delete();
//            } else if (file.isDirectory()) {
//                File files[] = file.listFiles();
//                for (int i = 0; i < files.length; i++) {
//                    this.deleteFile(files[i]);
//                }
//            }
//            file.delete();
//        } else {
//        }
//    }
//
//    /**
//     * 打开一个文件
//     *
//     * @param filePath 文件的绝对路径
//     */
//    private void openFile(final String filePath, Activity activity) {
//        String ext = filePath.substring(filePath.lastIndexOf('.')).toLowerCase(Locale.US);
//        try {
//            MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
//            String temp = ext.substring(1);
//            String mime = mimeTypeMap.getMimeTypeFromExtension(temp);
//
//            Intent intent = new Intent();
//            intent.setAction(Intent.ACTION_VIEW);
//            File file = new File(filePath);
//            intent.setDataAndType(Uri.fromFile(file), mime);
//            activity.startActivity(intent);
//        } catch (Exception e) {
//            e.printStackTrace();
//            Toast.makeText(activity, "无法打开后缀名为." + ext + "的文件！", Toast.LENGTH_LONG).show();
//        }
//    }
//
//    /**
//     * 获取文件夹大小
//     *
//     * @param file File实例
//     * @return long
//     */
//    public long getFolderSize(File file) {
//
//        long size = 0;
//        try {
//            File[] fileList = file.listFiles();
//            for (int i = 0; i < fileList.length; i++) {
//                if (fileList[i].isDirectory()) {
//                    size = size + getFolderSize(fileList[i]);
//
//                } else {
//                    size = size + fileList[i].length();
//
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return size;
//    }
//
//    public Intent openFile(String filePath, Context context) {
//
//        File file = new File(filePath);
//        if (!file.exists()) return null;
//        String end = file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName()
//                .length()).toLowerCase();
//        if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf") ||
//                end.equals("ogg") || end.equals("wav")) {
//            return getAudioFileIntent(filePath, context);
//        } else if (end.equals("3gp") || end.equals("mp4")) {
//            return getAudioFileIntent(filePath, context);
//        } else if (end.equals("jpg") || end.equals("gif") || end.equals("png") || end.equals
//                ("jpeg") || end.equals("bmp")) {
//            return getImageFileIntent(filePath, context);
//        } else if (end.equals("apk")) {
//            return getApkFileIntent(filePath, context);
//        } else if (end.equals("ppt")) {
//            return getPptFileIntent(filePath, context);
//        } else if (end.equals("xls")) {
//            return getExcelFileIntent(filePath, context);
//        } else if (end.equals("doc")) {
//            return getWordFileIntent(filePath, context);
//        } else if (end.equals("pdf")) {
//            return getPdfFileIntent(filePath, context);
//        } else if (end.equals("chm")) {
//            return getChmFileIntent(filePath, context);
//        } else if (end.equals("txt")) {
//            return getTextFileIntent(filePath, context, false);
//        } else {
//            return getAllIntent(filePath, context);
//        }
//    }
//
//    /**
//     * Android获取一个用于打开APK文件的intent
//     */
//    public Intent getAllIntent(String param, Context context) {
//
//        Intent intent = new Intent();
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        intent.setAction(Intent.ACTION_VIEW);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//
//        intent.setDataAndType(uri, "*/*");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开APK文件的intent
//     */
//    public Intent getApkFileIntent(String param, Context context) {
//
//        Intent intent = new Intent();
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        intent.setAction(Intent.ACTION_VIEW);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/vnd.android.package-archive");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开VIDEO文件的intent
//     */
//    public Intent getVideoFileIntent(String param) {
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//        intent.putExtra("oneshot", 0);
//        intent.putExtra("configchange", 0);
//        Uri uri = Uri.fromFile(new File(param));
//        intent.setDataAndType(uri, "video/*");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开AUDIO文件的intent
//     */
//    public Intent getAudioFileIntent(String param, Context context) {
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//        intent.putExtra("oneshot", 0);
//        intent.putExtra("configchange", 0);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "audio/*");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开PDF文件的intent
//     */
//    public static Intent getPdfFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/pdf");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开Html文件的intent
//     */
//    public Intent getHtmlFileIntent(String param) {
//        Uri uri = Uri.parse(param).buildUpon().encodedAuthority("com.android.htmlfileprovider")
//                .scheme("content").encodedPath(param).build();
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.setDataAndType(uri, "text/html");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开图片文件的intent
//     */
//    public Intent getImageFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "image/*");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开PPT文件的intent
//     */
//    public Intent getPptFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开Excel文件的intent
//     */
//    public static Intent getExcelFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/vnd.ms-excel");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开Word文件的intent
//     */
//    public static Intent getWordFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/msword");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开CHM文件的intent
//     */
//    public static Intent getChmFileIntent(String param, Context context) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        Uri uri = null;
//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            uri = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new File
//                    (param));
//            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//        } else {
//            uri = Uri.fromFile(new File(param));
//        }
//        intent.setDataAndType(uri, "application/x-chm");
//        return intent;
//    }
//
//    /**
//     * Android获取一个用于打开文本文件的intent
//     */
//    public static Intent getTextFileIntent(String param, Context context, boolean paramBoolean) {
//
//        Intent intent = new Intent("android.intent.action.VIEW");
//        intent.addCategory("android.intent.category.DEFAULT");
//        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//        if (paramBoolean) {
//            Uri uri1 = Uri.parse(param);
//            intent.setDataAndType(uri1, "text/plain");
//        } else {
//            Uri uri2 = null;
//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//                uri2 = FileProvider.getUriForFile(context, "cn.buzzfour.main.fileprovider", new
//                        File(param));
//                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//            } else {
//                uri2 = Uri.fromFile(new File(param));
//            }
//            intent.setDataAndType(uri2, "text/plain");
//        }
//        return intent;
//    }
//
//
//    /*
//     * 保存文件至图库，文件名为当前日期
//     */
//    public static void saveBitmap(Context context, Bitmap bitmap, String bitName) throws
//            IOException {
//        String fileName;
//        File file;
//        if (Build.BRAND.equals("Xiaomi")) { // 小米手机
//            fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" +
//                    bitName;
//        } else {  // Meizu 、Oppo
//            fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/" + bitName;
//        }
//        file = new File(fileName);
//        if (file.exists()) {
//            file.delete();
//        }
//        FileOutputStream out;
//        try {
//            out = new FileOutputStream(file);
//            // 格式为 JPEG，照相机拍出的图片为JPEG格式的，PNG格式的不能显示在相册中
//            if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)) {
//                out.flush();
//                out.close();
//                MediaStore.Images.Media.insertImage(context.getContentResolver(), file
//                        .getAbsolutePath(), bitName, null);
//
//            }
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//    }
//
//
//    public static Boolean saveBitmap(Context context, Bitmap bitmap, String bName, String path) {
//        Bitmap bm = bitmap;//获取一定尺寸的图片
//        File outputFile = new File(path);
//        if (!outputFile.exists()) {
//            outputFile.getParentFile().mkdirs();
//        }
//        FileOutputStream out = null;
//        try {
//            out = new FileOutputStream(outputFile);
//            bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
//        } catch (FileNotFoundException e) {
//            outputFile = new File(path + File.separator + bName);
//            if (!outputFile.exists()) {
//                outputFile.getParentFile().mkdirs();
//            }
//            try {
//                out = new FileOutputStream(outputFile);
//                bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
//            } catch (FileNotFoundException e1) {
//                return false;
//            }
//        }
//        // 把文件插入到系统图库
//        try {
//            MediaStore.Images.Media.insertImage(context.getContentResolver(), outputFile
//                    .getAbsolutePath(), bName, null);
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//            return false;
//        }
//        // 通知图库更新
//        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse
//                ("file://" + "/sdcard/namecard/")));
//        return true;
//    }
//
//    /**
//     * 字符串保存到手机内存设备中
//     *
//     * @param str
//     */
//    public static void saveFile(String str, String fileName) {
//        // 创建String对象保存文件名路径
//        try {
//            // 创建指定路径的文件
//            File file = new File(Environment.getExternalStorageDirectory(), fileName);
//            // 如果文件不存在
//            if (file.exists()) {
//                // 创建新的空文件
//                file.delete();
//            }
//            file.createNewFile();
//            // 获取文件的输出流对象
//            FileOutputStream outStream = new FileOutputStream(file);
//            // 获取字符串对象的byte数组并写入文件流
//            outStream.write(str.getBytes());
//            // 最后关闭文件输出流
//            outStream.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//    }
//
//    /**
//     * 删除已存储的文件
//     */
//    public static void deletefile(String fileName) {
//        try {
//            // 找到文件所在的路径并删除该文件
//            File file = new File(Environment.getExternalStorageDirectory(), fileName);
//            file.delete();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 读取文件里面的内容
//     *
//     * @return
//     */
//    public static String getFile(String fileName) {
//        try {
//            // 创建文件
//            File file = new File(Environment.getExternalStorageDirectory(), fileName);
//            // 创建FileInputStream对象
//            FileInputStream fis = new FileInputStream(file);
//            // 创建字节数组 每次缓冲1M
//            byte[] b = new byte[1024];
//            int len = 0;// 一次读取1024字节大小，没有数据后返回-1.
//            // 创建ByteArrayOutputStream对象
//            ByteArrayOutputStream baos = new ByteArrayOutputStream();
//            // 一次读取1024个字节，然后往字符输出流中写读取的字节数
//            while ((len = fis.read(b)) != -1) {
//                baos.write(b, 0, len);
//            }
//            // 将读取的字节总数生成字节数组
//            byte[] data = baos.toByteArray();
//            // 关闭字节输出流
//            baos.close();
//            // 关闭文件输入流
//            fis.close();
//            // 返回字符串对象
//            return new String(data);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//
//    }

    /**
     * 判断文件是否存在
     *
     * @param file 文件
     * @return {@code true}: 存在<br>{@code false}: 不存在
     */
    public static boolean isFileExists(final File file) {
        return file != null && file.exists();
    }

    /**
     * 判断文件是否存在，不存在则判断是否创建成功
     *
     * @param file 文件
     * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
     */
    public static boolean createOrExistsFile(final File file) {
        if (file == null) return false;
        // 如果存在，是文件则返回 true，是目录则返回 false
        if (file.exists()) return file.isFile();
        if (!createOrExistsDir(file.getParentFile())) return false;
        try {
            return file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 判断目录是否存在，不存在则判断是否创建成功
     *
     * @param file 文件
     * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
     */
    public static boolean createOrExistsDir(final File file) {
        // 如果存在，是目录则返回 true，是文件则返回 false，不存在则返回是否创建成功
        return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
    }

    /**
     * 判断目录是否存在，不存在则判断是否创建成功
     *
     * @param dirPath 目录路径
     * @return {@code true}: 存在或创建成功<br>{@code false}: 不存在或创建失败
     */
    public static boolean createOrExistsDir(final String dirPath) {
        return createOrExistsDir(getFileByPath(dirPath));
    }

    /**
     * 根据文件路径获取文件
     *
     * @param filePath 文件路径
     * @return 文件
     */
    public static File getFileByPath(final String filePath) {
        return isSpace(filePath) ? null : new File(filePath);
    }

    private static boolean isSpace(final String s) {
        if (s == null) return true;
        for (int i = 0, len = s.length(); i < len; ++i) {
            if (!Character.isWhitespace(s.charAt(i))) {
                return false;
            }
        }
        return true;
    }
}
